#!/bin/bash
# Script de configuracion de DNS
# Creado por : Pablo M.
# Fecha: 18-11-11

# Detalles :
# Arg1 : "resolv" - "master" - "slave"
# Arg2: si $1 = resolv entonces $2 puede ser "concaran" o "resto"

########### -------- NO TOCAR DESDE ACA ---------#####################

# Archivo de constantes
. ./const.sh
# Archivo de funciones
. ./utils.sh


### dnsResolv : reemplaza el archivo resolv.conf con el informado
# Arg 1 : Ruta del archivo resolv.conf que se desea poner en la $RESOLVCONF (ej :./resolv.conf.concaran)
function dnsResolv(){

	log "INICIANDO CONFIGURACION DE CLIENTE DNS"
	log "--------------------------------------"

	log "Verificando existencia de $1 ..."
	checkExist "$1"
	checkStatusAbort

	$BACKUP $RESOLVCONF $RESOLVCONF.grupo7

	log "Copiando nuevo archivo $1 a $RESOLVCONF ..."
	# Copio el archivo
	# cp $1 $RESOLVCONF
	sed "s#@@DNS_RESTO_IP@@#${DNS_RESTO_IP}#g" $1 | sed "s#@@DNS_CONCARAN_IP@@#${DNS_CONCARAN_IP}#g" - | sed "s#@@DNS_MASTER_IP@@#${DNS_MASTER_IP}#g" - > $RESOLVCONF

	exit 0

}

#### commonDNS : tareas comunes al master y slave
# verifica que exista el demonio de BIND, el script de backup, el directorio $NAMEDVAR y hace backup del named.conf

function commonDNS(){

	log "Verificando si BIND esta disponible ..."
	checkExec "$DAEMON_BIND" "No esta disponible el BIND"
	checkStatusAbort

	log "Deteniendo BIND ..."
	$DAEMON_BIND stop

	ESTADO=`netstat -tuna | grep ":53 " | wc -l`	
	if [ "ESTADO" != "0" ]; then
		log "El demonio no se detuvo bien, matando a la fuerza !!!"
		pkill -9 named
	fi

	$BACKUP $NAMEDCONF $NAMEDCONF.grupo7
	
	# Veo si existe el $NAMEDVAR, si existe le borro el contenido y sino lo creo
	if [ -d $NAMEDVAR ]; then
		log "El directorio $NAMEDVAR existia, sera borrado..."
		rm -fr $NAMEDVAR
	fi

	log "Se crea $NAMEDVAR ..."
	mkdir -p $NAMEDVAR
}


function slaveDNS(){

	log "INICIANDO CONFIGURACION DE SERVIDOR SLAVE DNS"
	log "---------------------------------------------"

	commonDNS
		
	log "Verificando la existencia de archivo $SLAVECONF ..."
	checkExist "$SLAVECONF"
	checkStatusAbort

	for DB in $DBS_LOCAL
	do
		log "Verificando la existencia de archivo $DB ..."
		checkExist $DB
		checkStatusAbort
		# Si no existe alguno entonces aborto la ejecucion
	done

	log "Copiando configuracion del slave de $SLAVECONF a $NAMEDCONF..."
	# Reemplazo el directorio de BIND y la IP del MASTER en archivo de configuracion
	sed "s#@@NAMED_CACHE@@#${NAMED_CACHE}#g" $SLAVECONF| sed "s#@@DNS_MASTER_IP@@#${DNS_MASTER_IP}#g" - | sed "s#@@NAMED_VAR@@#${NAMEDVAR}#g" - > $NAMEDCONF

	log "Copiando las bases de datos $DBS_LOCAL  y dando permisos 777 a cada DB..."
	for DB in $DBS_LOCAL
	do
		cp $DB $NAMEDVAR/
		#chmod 777 $NAMEDVAR/$DB
	done

	log "Dando permisos 775 en $NAMEDVAR ..."
	chown :bind -R	$NAMEDVAR
	chmod -R 775 $NAMEDVAR

	log "Creando $NAMED_CACHE para alojar los dominios aprendidos del MASTER..."
	rm -fr $NAMED_CACHE
	mkdir -p $NAMED_CACHE

	log "Dando permisos al bind en $NAMED_CACHE ..."
	chown bind:bind -R $NAMED_CACHE
	chmod -R 775 $NAMED_CACHE
	

	log "Iniciando el bind ..."
	$DAEMON_BIND start


}

function masterDNS(){

	log "INICIANDO CONFIGURACION DE SERVIDOR MASTER DNS"
	log "----------------------------------------------"

	commonDNS

	DBS_ALL="$DBS_BIND $DBS_LOCAL"	

	for DB in $DBS_ALL
	do
		log "Verificando la existencia de archivo $DB ..."
		checkExist $DB
		checkStatusAbort
		# Si no existe alguno entonces aborto la ejecucion
	done

	
	log "Verificando la existencia de archivo $MASTERCONF ..."
	checkExist "$MASTERCONF"
	checkStatusAbort

	log "Copiando el archivo de configuracion del master de $MASTERCONF a $NAMEDCONF..."
	# Reemplazando directorio de BIND , IP de esclavos en archivo de configuracion	
	sed "s#@@NAMED_DIR@@#${NAMEDVAR}#g" $MASTERCONF | sed "s#@@SLAVE_RESTO@@#${DNS_RESTO_IP}#g" - | sed "s#@@SLAVE_CONCARAN@@#${DNS_CONCARAN_IP}#g" - > $NAMEDCONF
	
	log "Copiando las bases de datos del master $DBS_ALL ..."
	for DB in $DBS_ALL
	do
		cp $DB $NAMEDVAR/

	done

	log "Dando permisos 777 a los archivos $NAMEDVAR/db.* y $NAMEDVAR/rndc.key..."
	chmod 777 $NAMEDVAR/db.*
	chmod 777 $NAMEDVAR/rndc.key

	log "Iniciando el bind ..."
	$DAEMON_BIND start

}

function ayuda(){

	echo "Error en los parametros"
	echo "-----------------------"
	echo "Los parametros validos de este script son:"
	echo ""
	echo " resolv : configura el cliente DNS, requiere parametro adicional ( concaran o resto )"
	echo " master : configura el servidor DNS Maestro"
	echo " slave : configura el servidor DNS Esclavo"

}


function resolv(){

	case $1 in
	concaran) dnsResolv "$CONCARAN_CONF";;
	resto) dnsResolv "$RESTO_CONF";;
	*) ayuda
	esac

}

######## FIN FUNCIONES - inicio ejecucion #################

inicio

case $1 in
resolv) resolv $2;;
master) masterDNS;;
slave) slaveDNS;;
*) ayuda
esac 


